home *** CD-ROM | disk | FTP | other *** search
-
- {
- Here is some code I found a while back that will work in D1 or D2. It
- checks for previous instance and if the program is already running, it will
- activate the previous instance including pulling up an iconic program. I
- have enclosed the source in an imaginary project (.dpr) file.
-
- ----- begin code for Check.dpr -----
- }
- program Check;
-
- uses WinTypes, WinProcs, SysUtils, Forms,
- MainForm in 'MAIN.PAS' {Form1},
- SecondForm in 'SECOND.PAS' {Form2},
- ThirdForm in 'THIRD.PAS' {Form3};
-
- {$R *.RES}
- {$IFDEF Win32}
- var Mutex: THandle;
- {$ENDIF}
-
- procedure CheckPrevInst;
- var PrevWnd: HWnd;
- begin
- {$IFDEF Win32}
- Mutex:=CreateMutex(NIL, False, 'SingleInstanceProgramMutex');
- if WaitForSingleObject(Mutex, 10000)=WAIT_TIMEOUT then Halt;
- {$ELSE}
- if HPrevInst=0 then Exit;
- {$ENDIF}
- PrevWnd:=FindWindow('TOneInstanceForm1', '1-Instance Program');
- if PrevWnd<>0 then PrevWnd:=GetWindow(PrevWnd, GW_OWNER);
- if PrevWnd<>0 then begin
- if IsIconic(PrevWnd) then ShowWindow(PrevWnd, SW_SHOWNORMAL)
- else {$IFDEF Win32}
- SetForegroundWindow(PrevWnd);
- {$ELSE}
- BringWindowToTop(PrevWnd);
- {$ENDIF}
- Halt;
- end;
- end;
-
- begin
- try
- CheckPrevInst;
- Application.CreateForm(TOneInstanceForm1, OneInstanceForm1);
- finally
- {$IFDEF Win32}
- OneInstanceForm1.HandleNeeded;
- ReleaseMutex(Mutex);
- CloseHandle(Mutex);
- {$ENDIF}
- end;
- Application.CreateForm(TForm2, Form2);
- Application.CreateForm(TForm3, Form3);
- Application.Run;
- end.